<?php

/**
 * @Project NUKEVIET 3.0
 * @Author VINADES.,JSC (contact@vinades.vn)
 * @Copyright (C) 2010 VINADES.,JSC. All rights reserved
 * @Createdate 2-1-2010 22:42
 */

define('NV_ADMIN', true);
require_once ('mainfile.php');

$file_config_temp = NV_TEMP_DIR . "/config_" . md5($global_config['sitekey']) . ".php";

$dirs = nv_scandir(NV_ROOTDIR . "/language", "/^([a-z]{2})/");

$languageslist = array();
foreach ($dirs as $file)
{
    if (is_file(NV_ROOTDIR . '/language/' . $file . '/install.php'))
    {
        $languageslist[] = $file;
    }
}

require_once (NV_ROOTDIR . "/modules/users/language/" . NV_LANG_DATA . ".php");
require_once (NV_ROOTDIR . "/language/" . NV_LANG_DATA . "/install.php");
require_once (NV_ROOTDIR . "/install/template.php");
require_once (NV_ROOTDIR . "/includes/core/admin_functions.php");

if (is_file(NV_ROOTDIR . '/' . $file_config_temp))
{
    require_once (NV_ROOTDIR . '/' . $file_config_temp);
    //Bat dau phien lam viec cua MySQL
    require_once (NV_ROOTDIR . '/includes/class/mysql.class.php');
    $db_config['new_link'] = NV_MYSQL_NEW_LINK;
    $db_config['persistency'] = NV_MYSQL_PERSISTENCY;
    $db_config['collation'] = NV_MYSQL_COLLATION;
}

$contents = "";
$step = $nv_Request->get_int('step', 'post,get', 1);

$maxstep = $nv_Request->get_int('maxstep', 'session', 1);

if ($step <= 0 or $step > 7)
{
    Header("Location: " . NV_BASE_SITEURL . "install/index.php?" . NV_LANG_VARIABLE . "=" . NV_LANG_DATA . "&step=1");
    exit();
}

if ($step > $maxstep and $step > 2)
{
    $step = $maxstep;
    Header("Location: " . NV_BASE_SITEURL . "install/index.php?" . NV_LANG_VARIABLE . "=" . NV_LANG_DATA . "&step=" . $step);
    exit();
}

if (file_exists(NV_ROOTDIR . "/" . NV_CONFIG_FILENAME) and $step < 7)
{
    Header("Location: " . NV_BASE_SITEURL . "index.php");
    exit();
}

if ($step == 1)
{
    if ($step < 2)
    {
        $nv_Request->set_Session('maxstep', 2);
    }
    $title = $lang_module['select_language'];

    $contents = nv_step_1();
}
elseif ($step == 2)
{
    $array_dir = array(NV_SESSION_SAVE_PATH, NV_LOGS_DIR, NV_LOGS_DIR . "/data_logs", NV_LOGS_DIR . "/dump_backup", NV_LOGS_DIR . "/error_logs", NV_LOGS_DIR . "/error_logs/errors256", NV_LOGS_DIR . "/error_logs/old", NV_LOGS_DIR . "/error_logs/tmp", NV_LOGS_DIR . "/ip_logs", NV_LOGS_DIR . "/ref_logs", NV_LOGS_DIR . "/voting_logs", NV_CACHEDIR, NV_UPLOADS_DIR, NV_TEMP_DIR, NV_FILES_DIR, NV_FILES_DIR . "/css", NV_FILES_DIR . "/js", NV_DATADIR, NV_DATADIR . "/ip_files", );
    $array_file_data = nv_scandir(NV_ROOTDIR . "/" . NV_DATADIR, "/^([a-zA-Z0-9\-\_\.]+)\.([a-z0-9]{2,6})$/");
    foreach ($array_file_data as $file_i)
    {
        $array_dir[] = NV_DATADIR . "/" . $file_i;
    }
    $array_dir[] = $file_config_temp;

    if (!empty($sys_info['supports_rewrite']))
    {
        if ($sys_info['supports_rewrite'] == "rewrite_mode_apache")
        {
            $array_dir[] = ".htaccess";
        }
        else
        {
            $array_dir[] = "web.config";
        }
    }

    $ftp_check_login = 0;
    $global_config['ftp_server'] = $nv_Request->get_string('ftp_server', 'post', 'localhost');
    $global_config['ftp_port'] = $nv_Request->get_int('ftp_port', 'post', 21);
    $global_config['ftp_user_name'] = $nv_Request->get_string('ftp_user_name', 'post', '');
    $global_config['ftp_user_pass'] = $nv_Request->get_string('ftp_user_pass', 'post', '');
    $global_config['ftp_path'] = $nv_Request->get_string('ftp_path', 'post', '/');

    $array_ftp_data = array('ftp_server' => $global_config['ftp_server'], 'ftp_port' => $global_config['ftp_port'], 'ftp_user_name' => $global_config['ftp_user_name'], 'ftp_user_pass' => $global_config['ftp_user_pass'], 'ftp_path' => $global_config['ftp_path'], 'error' => '');

    $modftp = $nv_Request->get_int('modftp', 'post', 0);
    if ($modftp)
    {
        if (!empty($global_config['ftp_server']) and !empty($global_config['ftp_user_name']) and !empty($global_config['ftp_user_pass']))
        {
            // set up basic connection
            $conn_id = ftp_connect($global_config['ftp_server'], $global_config['ftp_port'], 10);

            // login with username and password
            $login_result = ftp_login($conn_id, $global_config['ftp_user_name'], $global_config['ftp_user_pass']);
            if ((!$conn_id) || (!$login_result))
            {
                $ftp_check_login = 3;
                $array_ftp_data['error'] = $lang_module['ftp_error_account'];
            }
            elseif (ftp_chdir($conn_id, $global_config['ftp_path']))
            {
                $check_files = array(NV_CACHEDIR, NV_DATADIR, "images", "includes", "index.php", "robots.txt", "js", "language", NV_LOGS_DIR, "mainfile.php", "modules", NV_SESSION_SAVE_PATH, "themes", NV_TEMP_DIR, NV_UPLOADS_DIR);
                $list_files = ftp_nlist($conn_id, ".");
                $a = 0;
                foreach ($list_files as $filename)
                {
                    $filename = basename($filename);
                    if (in_array($filename, $check_files))
                    {
                        ++$a;
                    }
                }
                if ($a == sizeof($check_files))
                {
                    $ftp_check_login = 1;
                    nv_chmod_dir($conn_id, NV_DATADIR, true);
                    nv_chmod_dir($conn_id, NV_TEMP_DIR, true);
                    nv_save_file_config();
                    nv_chmod_dir($conn_id, NV_TEMP_DIR, true);
                }
                else
                {
                    $ftp_check_login = 2;
                    $array_ftp_data['error'] = $lang_module['ftp_error_path'];
                }
            }
            else
            {
                $ftp_check_login = 2;
                $array_ftp_data['error'] = $lang_module['ftp_error_path'];
            }
            $global_config['ftp_check_login'] = $ftp_check_login;
        }
    }

    $nextstep = 1;
    $array_dir_check = array();
    foreach ($array_dir as $dir)
    {
        if ($ftp_check_login == 1)
        {
            if (!is_dir(NV_ROOTDIR . '/' . $dir) and $dir != $file_config_temp)
            {
                ftp_mkdir($conn_id, $dir);
            }

            if (!is_writable(NV_ROOTDIR . '/' . $dir))
            {
                if (substr($sys_info['os'], 0, 3) != 'WIN')
                    ftp_chmod($conn_id, 0777, $dir);
            }
        }
        if ($dir == $file_config_temp and !file_exists(NV_ROOTDIR . '/' . $file_config_temp) and is_writable(NV_ROOTDIR . '/' . NV_TEMP_DIR))
        {
            file_put_contents(NV_ROOTDIR . '/' . $file_config_temp, '', LOCK_EX);
        }
        if (is_file(NV_ROOTDIR . '/' . $dir))
        {
            if (is_writable(NV_ROOTDIR . '/' . $dir))
            {
                $array_dir_check[$dir] = $lang_module['dir_writable'];
            }
            else
            {
                $array_dir_check[$dir] = $lang_module['dir_not_writable'];
                $nextstep = 0;
            }
        }
        elseif (is_dir(NV_ROOTDIR . '/' . $dir))
        {
            if (is_writable(NV_ROOTDIR . '/' . $dir))
            {
                $array_dir_check[$dir] = $lang_module['dir_writable'];
            }
            else
            {
                $array_dir_check[$dir] = $lang_module['dir_not_writable'];
                $nextstep = 0;
            }
        }
        else
        {
            $array_dir_check[$dir] = $lang_module['dir_noexit'];
            $nextstep = 0;
        }
    }
    if (!nv_save_file_config($db_config, $global_config) and $ftp_check_login == 1)
    {
        ftp_chmod($conn_id, 0777, $file_config_temp);
    }
    if ($ftp_check_login > 0)
    {
        ftp_close($conn_id);
    }
    if ($nextstep)
    {
        $i = 0;
        for ($ip_file = 0; $ip_file <= 255; $ip_file++)
        {
            if (file_put_contents(NV_ROOTDIR . "/" . NV_DATADIR . "/ip_files/" . $ip_file . ".php", "<?php\n\n\$ranges = array();\n\n?>", LOCK_EX))
            {
                ++$i;
            }
        }
        if ($i != 256)
        {
            $nextstep = 0;
            $array_dir_check[NV_DATADIR . "/ip_files"] = sprintf($lang_module['dir_not_writable_ip_files'], NV_DATADIR . "/ip_files");
        }
    }
    if ($step < 3 and $nextstep == 1)
    {
        $nv_Request->set_Session('maxstep', 3);
    }
    $title = $lang_module['check_chmod'];
    $contents = nv_step_2($array_dir_check, $array_ftp_data, $nextstep);
}
elseif ($step == 3)
{
    if ($step < 4)
    {
        $nv_Request->set_Session('maxstep', 4);
    }
    $title = $lang_module['license'];

    if (file_exists(NV_ROOTDIR . "/install/licenses_" . NV_LANG_DATA . ".html"))
    {
        $license = file_get_contents(NV_ROOTDIR . "/install/licenses_" . NV_LANG_DATA . ".html");
    }
    else
    {
        $license = file_get_contents(NV_ROOTDIR . "/install/licenses.html");
    }
    $contents = nv_step_3($license);
}
elseif ($step == 4)
{
    $nextstep = 1;
    $title = $lang_module['check_server'];

    $array_resquest = array();
    $array_resquest_key = array('php_support', 'mysql_support', 'opendir_support', 'gd_support', 'session_support', 'fileuploads_support');

    foreach ($array_resquest_key as $key)
    {
        $array_resquest[$key] = ($sys_info[$key]) ? $lang_module['compatible'] : $lang_module['not_compatible'];
        if (!$sys_info[$key])
        {
            $nextstep = 0;
        }
    }
    if ($step < 5 and $nextstep == 1)
    {
        $nv_Request->set_Session('maxstep', 5);
    }

    $array_suport = array();
    $array_support['supports_rewrite'] = ( empty($sys_info['supports_rewrite'])) ? $lang_module['not_compatible'] : $lang_module['compatible'];
    $array_support['safe_mode'] = ($sys_info['safe_mode']) ? $lang_module['not_compatible'] : $lang_module['compatible'];
    $array_support['register_globals'] = (ini_get('register_globals') == '1' || strtolower(ini_get('register_globals')) == 'on') ? $lang_module['not_compatible'] : $lang_module['compatible'];
    $array_support['magic_quotes_runtime'] = (ini_get('magic_quotes_runtime') == '1' || strtolower(ini_get('magic_quotes_runtime')) == 'on') ? $lang_module['not_compatible'] : $lang_module['compatible'];
    $array_support['magic_quotes_gpc'] = (ini_get('magic_quotes_gpc') == '1' || strtolower(ini_get('magic_quotes_gpc')) == 'on') ? $lang_module['not_compatible'] : $lang_module['compatible'];
    $array_support['magic_quotes_sybase'] = (ini_get('magic_quotes_sybase') == '1' || strtolower(ini_get('magic_quotes_sybase')) == 'on') ? $lang_module['not_compatible'] : $lang_module['compatible'];
    $array_support['output_buffering'] = (ini_get('output_buffering') == '1' || strtolower(ini_get('output_buffering')) == 'on') ? $lang_module['not_compatible'] : $lang_module['compatible'];
    $array_support['session_auto_start'] = (ini_get('session.auto_start') == '1' || strtolower(ini_get('session.auto_start')) == 'on') ? $lang_module['not_compatible'] : $lang_module['compatible'];
    $array_support['display_errors'] = (ini_get('display_errors') == '1' || strtolower(ini_get('display_errors')) == 'on') ? $lang_module['not_compatible'] : $lang_module['compatible'];
    $array_support['allowed_set_time_limit'] = ($sys_info['allowed_set_time_limit']) ? $lang_module['compatible'] : $lang_module['not_compatible'];
    $array_support['zlib_support'] = ($sys_info['zlib_support']) ? $lang_module['compatible'] : $lang_module['not_compatible'];
    $array_support['zip_support'] = ( extension_loaded('zip')) ? $lang_module['compatible'] : $lang_module['not_compatible'];

    $contents = nv_step_4($array_resquest, $array_support, $nextstep);
}
elseif ($step == 5)
{
    $nextstep = 0;
    $db_config['dbport'] = "";
    $db_config['error'] = "";
    $db_config['dbhost'] = $nv_Request->get_string('dbhost', 'post', $db_config['dbhost']);
    $db_config['dbname'] = $nv_Request->get_string('dbname', 'post', $db_config['dbname']);
    $db_config['dbuname'] = $nv_Request->get_string('dbuname', 'post', $db_config['dbuname']);
    $db_config['dbpass'] = $nv_Request->get_string('dbpass', 'post', $db_config['dbpass']);
    $db_config['prefix'] = $nv_Request->get_string('prefix', 'post', 'nv3');
    $db_config['db_detete'] = $nv_Request->get_int('db_detete', 'post', '0');
    $db_config['num_table'] = 0;
    $db_config['create_db'] = 1;
    if (!empty($db_config['dbhost']) and !empty($db_config['dbname']) and !empty($db_config['dbuname']) and !empty($db_config['prefix']))
    {
        $db_config['dbuname'] = preg_replace(array("/[^a-z0-9]/", '/[\_]+/', "/^[\_]+/", "/[\_]+$/"), array("_", "_", "", ""), strtolower($db_config['dbuname']));
        $db_config['dbname'] = preg_replace(array("/[^a-z0-9]/", '/[\_]+/', "/^[\_]+/", "/[\_]+$/"), array("_", "_", "", ""), strtolower($db_config['dbname']));
        $db_config['prefix'] = preg_replace(array("/[^a-z0-9]/", '/[\_]+/', "/^[\_]+/", "/[\_]+$/"), array("_", "_", "", ""), strtolower($db_config['prefix']));

        $db = new sql_db($db_config);
        if (!empty($db->error))
        {
            $db_config['error'] = (!empty($db->error['user_message'])) ? $db->error['user_message'] : $db->error['message'];
        }
        else
        {
            $tables = array();
            $result = $db->sql_query("SHOW TABLE STATUS LIKE '" . $db_config['prefix'] . "\_%'");
            $num_table = intval($db->sql_numrows($result));
            if ($num_table > 0)
            {
                if ($db_config['db_detete'] == 1)
                {
                    while ($item = $db->sql_fetch_assoc($result))
                    {
                        $db->sql_query("DROP TABLE `" . $item['Name'] . "`");
                    }
                    $num_table = 0;
                }
                else
                {
                    $db_config['error'] = $lang_module['db_err_prefix'];
                }
            }
            $db_config['num_table'] = $num_table;
            if ($num_table == 0)
            {
                nv_save_file_config();
                $db_config['error'] = "";
                $sql_create_table = array();
                //cai dat du lieu cho he thong
                require_once (NV_ROOTDIR . "/install/data.php");
                foreach ($sql_create_table as $query)
                {
                    if (!$db->sql_query($query))
                    {
                        $nv_Request->set_Session('maxstep', 1);
                        die($query);
                        $db_config['error'] = (!empty($db->error['user_message'])) ? $db->error['user_message'] : $db->error['message'];
                        break;
                    }
                }
                //Het cai dat du lieu cho he thong

                //Cai dat du lieu cho cac module
                if (empty($db_config['error']))
                {
                    define('NV_IS_MODADMIN', true);
                    $module_name = "modules";
                    $lang_module['modules'] = "";
                    $lang_module['vmodule_add'] = "";
                    $lang_module['autoinstall'] = "";
                    $lang_global['mod_modules'] = "";
                    require_once (NV_ROOTDIR . "/" . NV_ADMINDIR . "/modules/modules/functions.php");
                    $module_name = "";
                    require_once (NV_ROOTDIR . '/includes/sqldata.php');

                    $modules_exit = nv_scandir(NV_ROOTDIR . "/modules", $global_config['check_module']);
                    $modules_exit[] = 'global';

                    //cai dat du lieu cho  ngon ngu
                    $sql_create_table = nv_create_table_sys(NV_LANG_DATA);
                    foreach ($sql_create_table as $query)
                    {
                        if (!$db->sql_query($query))
                        {
                            $nv_Request->set_Session('maxstep', 1);
                            $db_config['error'] = (!empty($db->error['user_message'])) ? $db->error['user_message'] : $db->error['message'];
                            break;
                        }
                    }
                    $sql = "SELECT * FROM `" . $db_config['prefix'] . "_" . NV_LANG_DATA . "_modules` ORDER BY `weight` ASC";
                    $result = $db->sql_query($sql);
                    while ($row = $db->sql_fetchrow($result))
                    {
                        $setmodule = $row['title'];
                        if (in_array($row['module_file'], $modules_exit))
                        {
                            $sm = nv_setup_data_module(NV_LANG_DATA, $setmodule);
                            if ($sm != "OK_" . $setmodule)
                            {
                                die("error set module: " . $setmodule);
                            }
                        }
                        else
                        {
                            $sql = "DELETE FROM `" . $db_config['prefix'] . "_" . NV_LANG_DATA . "_modules` WHERE `title`=" . $db->dbescape($setmodule);
                            $db->sql_query($sql);
                        }
                    }

                    //cai dat du lieu mau
                    $filesavedata = NV_LANG_DATA;
                    $lang_data = NV_LANG_DATA;
                    if (!file_exists(NV_ROOTDIR . "/install/data_" . $lang_data . ".php"))
                    {
                        $filesavedata = "en";
                    }
                    include_once (NV_ROOTDIR . "/install/data_" . $filesavedata . ".php");
                    foreach ($sql_create_table as $query)
                    {
                        if (!$db->sql_query($query))
                        {
                            $nv_Request->set_Session('maxstep', 1);
                            die($query);
                            $db_config['error'] = (!empty($db->error['user_message'])) ? $db->error['user_message'] : $db->error['message'];
                            break;
                        }
                    }

                    //xoa du lieu tai bang nv3_vi_blocks
                    $sql = "DELETE FROM `" . $db_config['prefix'] . "_" . $lang_data . "_blocks_weight` WHERE `bid` in (SELECT `bid` FROM `" . $db_config['prefix'] . "_" . $lang_data . "_blocks_groups` WHERE `module` NOT IN ('" . implode("', '", $modules_exit) . "'))";
                    $db->sql_query($sql);

                    //xoa du lieu tai bang nv3_vi_blocks_groups
                    $sql = "DELETE FROM `" . $db_config['prefix'] . "_" . $lang_data . "_blocks_groups` WHERE `module` NOT IN ('" . implode("', '", $modules_exit) . "')";
                    $db->sql_query($sql);

                    //xoa du lieu tai bang nv3_vi_modthemes
                    $sql = "DELETE FROM `" . $db_config['prefix'] . "_" . $lang_data . "_modthemes` WHERE `func_id` in (SELECT `func_id` FROM `" . $db_config['prefix'] . "_" . $lang_data . "_modfuncs` WHERE `in_module` NOT IN ('" . implode("', '", $modules_exit) . "'))";
                    $db->sql_query($sql);

                    //xoa du lieu tai bang  nv3_vi_modfuncs
                    $sql = "DELETE FROM `" . $db_config['prefix'] . "_" . $lang_data . "_modfuncs` WHERE `in_module` NOT IN ('" . implode("', '", $modules_exit) . "')";
                    $db->sql_query($sql);

                    //xoa du lieu tai bang  nv3_vi_modules
                    $sql = "DELETE FROM `" . $db_config['prefix'] . "_" . $lang_data . "_modules` WHERE `title` NOT IN ('" . implode("', '", $modules_exit) . "')";
                    $db->sql_query($sql);

                    //xoa du lieu tai bang  nv3_setup_modules
                    $sql = "DELETE FROM `" . $db_config['prefix'] . "_setup_modules` WHERE `title` NOT IN ('" . implode("', '", $modules_exit) . "')";
                    $db->sql_query($sql);

                    ///xoa du lieu tai bang nv3_config
                    $sql = "DELETE FROM `" . $db_config['prefix'] . "_config` WHERE `lang`=" . $db->dbescape($lang_data) . " AND `module` NOT IN ('" . implode("', '", $modules_exit) . "')";
                    $db->sql_query($sql);

                    $sql = "SELECT * FROM `" . $db_config['prefix'] . "_" . NV_LANG_DATA . "_modules` WHERE `title`='news'";
                    $result = $db->sql_query($sql);
                    if ($db->sql_numrows($result))
                    {
                        $result = $db->sql_query("SELECT catid FROM `" . $db_config['prefix'] . "_" . $lang_data . "_news_cat` ORDER BY `order` ASC");
                        while (list($catid_i) = $db->sql_fetchrow($result))
                        {
                            nv_create_table_news($catid_i);
                        }
                        $db->sql_freeresult();

                        $result = $db->sql_query("SELECT id, listcatid FROM `" . $db_config['prefix'] . "_" . $lang_data . "_news_rows` ORDER BY `id` ASC");
                        while (list($id, $listcatid) = $db->sql_fetchrow($result))
                        {
                            $arr_catid = explode(",", $listcatid);
                            foreach ($arr_catid as $catid)
                            {
                                $db->sql_query("INSERT INTO `" . $db_config['prefix'] . "_" . $lang_data . "_news_" . $catid . "` SELECT * FROM `" . $db_config['prefix'] . "_" . $lang_data . "_news_rows` WHERE `id`=" . $id . "");
                            }
                        }
                        $db->sql_freeresult();
                    }

                    ++$step;
                    $nv_Request->set_Session('maxstep', $step);

                    Header("Location: " . NV_BASE_SITEURL . "install/index.php?" . NV_LANG_VARIABLE . "=" . NV_LANG_DATA . "&step=" . $step);
                    exit();
                }

                //	Het cai dat du lieu cho cac module
            }
        }
    }

    $title = $lang_module['config_database'];
    $contents = nv_step_5($db_config, $nextstep);
}
elseif ($step == 6)
{
    $nextstep = 0;
    $array_data = array();
    $error = $site_name = $login = $email = $password = $re_password = "";
    if ($nv_Request->isset_request('nv_login,nv_password', 'post'))
    {
        $site_name = filter_text_input('site_name', 'post', '', 1);
        $login = filter_text_input('nv_login', 'post', '', 1, NV_UNICKMAX);
        $email = filter_text_input('nv_email', 'post', '');
        $password = filter_text_input('nv_password', 'post', '');
        $re_password = filter_text_input('re_password', 'post', '');
        $check_login = nv_check_valid_login($login, NV_UNICKMAX, NV_UNICKMIN);
        $check_pass = nv_check_valid_pass($password, NV_UPASSMAX, NV_UPASSMIN);
        $check_email = nv_check_valid_email($email);

        $question = filter_text_input('question', 'post', '', 1);
        $answer_question = filter_text_input('answer_question', 'post', '', 1);

        $array_data['site_name'] = $site_name;
        $array_data['nv_login'] = $login;
        $array_data['nv_email'] = $email;
        $array_data['nv_password'] = $password;
        $array_data['re_password'] = $re_password;
        $array_data['nv_login'] = $login;
        $array_data['question'] = $question;
        $array_data['answer_question'] = $answer_question;

        $global_config['site_email'] = $email;

        $db = new sql_db($db_config);
        if (!empty($db->error))
        {
            $error = (!empty($db->error['user_message'])) ? $db->error['user_message'] : $db->error['message'];
        }
        elseif (empty($site_name))
        {
            $error = $lang_module['err_sitename'];
        }
        elseif (!empty($check_login))
        {
            $error = $check_login;
        }
        elseif ($login != $db->fixdb($login))
        {
            $error = sprintf($lang_module['account_deny_name'], '<strong>' . $login . '</strong>');
        }
        elseif (!empty($check_email))
        {
            $error = $check_email;
        }
        elseif (!empty($check_pass))
        {
            $error = $check_pass;
        }
        elseif ($password != $re_password)
        {
            $error = sprintf($lang_global['passwordsincorrect'], $password, $re_password);
        }
        elseif (empty($question))
        {
            $error = $lang_module['your_question_empty'];
        }
        elseif (empty($answer_question))
        {
            $error = $lang_module['answer_empty'];
        }
        else
        {
            $password = $crypt->hash($password);
            define('NV_CONFIG_GLOBALTABLE', $db_config['prefix'] . '_config');

            $db->sql_query("TRUNCATE TABLE `" . $db_config['prefix'] . "_users`");
            $sql = "INSERT INTO `" . $db_config['prefix'] . "_users` (`userid`, `username`, `md5username`, `password`, `email`, `full_name`, `gender`, `photo`, `birthday`, `sig`, `regdate`, `website`, `location`, `yim`, `telephone`, `fax`, `mobile`, `question`, `answer`, `passlostkey`, `view_mail`, `remember`, `in_groups`, `active`, `checknum`, `last_login`, `last_ip`, `last_agent`, `last_openid`) 
                VALUES(NULL, " . $db->dbescape($login) . ", " . $db->dbescape(md5($login)) . ", " . $db->dbescape($password) . ", " . $db->dbescape($email) . ", " . $db->dbescape($login) . ", '', '', 0, NULL, " . NV_CURRENTTIME . ", '', '', '', '', '', '', " . $db->dbescape($question) . ", " . $db->dbescape($answer_question) . ", '', 0, 1, '', 1, '', " . NV_CURRENTTIME . ", '', '', '')";
            $userid = $db->sql_query_insert_id($sql);

            $db->sql_query("TRUNCATE TABLE `" . $db_config['prefix'] . "_authors`");
            $sql = "INSERT INTO `" . $db_config['prefix'] . "_authors` (`admin_id`, `editor`, `lev`, `files_level`, `position`, `addtime`, `edittime`, `is_suspend`, `susp_reason`, `check_num`, `last_login`, `last_ip`, `last_agent`) VALUES(" . $userid . ", 'ckeditor', 1, 'adobe,application,archives,audio,documents,flash,images,real,video|1|1|1', 'Administrator', 0, 0, 0, '', '', 0, '', '')";
            if ($userid > 0 and $db->sql_query($sql))
            {
                $sql = array();
                $sql[] = "INSERT INTO `" . NV_CONFIG_GLOBALTABLE . "` (`lang`, `module`, `config_name`, `config_value`) VALUES ('sys', 'global', 'site_email', " . $db->dbescape_string($global_config['site_email']) . ")";
                $sql[] = "INSERT INTO `" . NV_CONFIG_GLOBALTABLE . "` (`lang`, `module`, `config_name`, `config_value`) VALUES ('sys', 'global', 'error_send_email', " . $db->dbescape_string($global_config['site_email']) . ")";
                $sql[] = "INSERT INTO `" . NV_CONFIG_GLOBALTABLE . "` (`lang`, `module`, `config_name`, `config_value`) VALUES ('sys', 'global', 'my_domains', " . $db->dbescape_string(NV_SERVER_NAME) . ")";
                $sql[] = "INSERT INTO `" . NV_CONFIG_GLOBALTABLE . "` (`lang`, `module`, `config_name`, `config_value`) VALUES ('sys', 'global', 'cookie_prefix', " . $db->dbescape_string($global_config['cookie_prefix']) . ")";
                $sql[] = "INSERT INTO `" . NV_CONFIG_GLOBALTABLE . "` (`lang`, `module`, `config_name`, `config_value`) VALUES ('sys', 'global', 'session_prefix', " . $db->dbescape_string($global_config['session_prefix']) . ")";
                $sql[] = "INSERT INTO `" . NV_CONFIG_GLOBALTABLE . "` (`lang`, `module`, `config_name`, `config_value`) VALUES ('sys', 'global', 'site_timezone', " . $db->dbescape_string($global_config['site_timezone']) . ")";
                $sql[] = "INSERT INTO `" . NV_CONFIG_GLOBALTABLE . "` (`lang`, `module`, `config_name`, `config_value`) VALUES ('sys', 'global', 'statistics_timezone', " . $db->dbescape_string(NV_SITE_TIMEZONE_NAME) . ")";
                $sql[] = "INSERT INTO `" . NV_CONFIG_GLOBALTABLE . "` (`lang`, `module`, `config_name`, `config_value`) VALUES ('sys', 'global', 'proxy_blocker', " . $db->dbescape_string($global_config['proxy_blocker']) . ")";
                $sql[] = "INSERT INTO `" . NV_CONFIG_GLOBALTABLE . "` (`lang`, `module`, `config_name`, `config_value`) VALUES ('sys', 'global', 'str_referer_blocker', " . $db->dbescape_string($global_config['str_referer_blocker']) . ")";
                $sql[] = "INSERT INTO `" . NV_CONFIG_GLOBALTABLE . "` (`lang`, `module`, `config_name`, `config_value`) VALUES ('sys', 'global', 'lang_multi', " . $db->dbescape_string($global_config['lang_multi']) . ")";
                $sql[] = "INSERT INTO `" . NV_CONFIG_GLOBALTABLE . "` (`lang`, `module`, `config_name`, `config_value`) VALUES ('sys', 'global', 'lang_geo', " . $db->dbescape_string($global_config['lang_geo']) . ")";
                $sql[] = "INSERT INTO `" . NV_CONFIG_GLOBALTABLE . "` (`lang`, `module`, `config_name`, `config_value`) VALUES ('sys', 'global', 'site_lang', " . $db->dbescape_string($global_config['site_lang']) . ")";

                $sql[] = "INSERT INTO `" . NV_CONFIG_GLOBALTABLE . "` (`lang`, `module`, `config_name`, `config_value`) VALUES ('sys', 'global', 'ftp_server', " . $db->dbescape_string($global_config['ftp_server']) . ")";
                $sql[] = "INSERT INTO `" . NV_CONFIG_GLOBALTABLE . "` (`lang`, `module`, `config_name`, `config_value`) VALUES ('sys', 'global', 'ftp_port', " . $db->dbescape_string($global_config['ftp_port']) . ")";
                $sql[] = "INSERT INTO `" . NV_CONFIG_GLOBALTABLE . "` (`lang`, `module`, `config_name`, `config_value`) VALUES ('sys', 'global', 'ftp_user_name', " . $db->dbescape_string($global_config['ftp_user_name']) . ")";
                $sql[] = "INSERT INTO `" . NV_CONFIG_GLOBALTABLE . "` (`lang`, `module`, `config_name`, `config_value`) VALUES ('sys', 'global', 'ftp_user_pass', " . $db->dbescape_string($global_config['ftp_user_pass']) . ")";
                $sql[] = "INSERT INTO `" . NV_CONFIG_GLOBALTABLE . "` (`lang`, `module`, `config_name`, `config_value`) VALUES ('sys', 'global', 'ftp_path', " . $db->dbescape_string($global_config['ftp_path']) . ")";
                $sql[] = "INSERT INTO `" . NV_CONFIG_GLOBALTABLE . "` (`lang`, `module`, `config_name`, `config_value`) VALUES ('sys', 'global', 'ftp_check_login', " . $db->dbescape_string($global_config['ftp_check_login']) . ")";
                $sql[] = "UPDATE `" . NV_CONFIG_GLOBALTABLE . "` SET `config_value` =  " . $db->dbescape_string($site_name) . " WHERE `module` =  'global' AND `config_name` = 'site_name'";
                foreach ($sql as $sql_i)
                {
                    $result = $db->sql_query($sql_i);
                }
                nv_save_file_config();
                if (nv_save_file_config_global())
                {
                    ++$step;
                    $nv_Request->set_Session('maxstep', $step);
                    nv_save_file_config();
                    $array_config_rewrite = array('rewrite_optional' => $global_config['rewrite_optional'], 'rewrite_endurl' => $global_config['rewrite_endurl'], 'rewrite_exturl' => $global_config['rewrite_exturl']);
                    nv_rewrite_change($array_config_rewrite);

                    @rename(NV_ROOTDIR . "/" . $file_config_temp, NV_ROOTDIR . "/" . NV_TEMP_DIR . "/" . NV_CONFIG_FILENAME);
                    if (is_writable(NV_ROOTDIR . "/robots.txt"))
                    {
                        $contents = file_get_contents(NV_ROOTDIR . "/robots.txt");

                        if ($global_config['is_url_rewrite'])
                        {
                            $check_rewrite_file = nv_check_rewrite_file();
                            if ($check_rewrite_file)
                            {
                                $content_sitemap = "Sitemap: " . NV_MY_DOMAIN . NV_BASE_SITEURL . "Sitemap.xml";
                            }
                            else
                            {
                                $content_sitemap = "Sitemap: " . NV_MY_DOMAIN . NV_BASE_SITEURL . "index.php/SitemapIndex" . $global_config['rewrite_endurl'];
                            }
                        }
                        else
                        {
                            $content_sitemap = "Sitemap: " . NV_MY_DOMAIN . NV_BASE_SITEURL . "index.php?" . NV_NAME_VARIABLE . "=SitemapIndex";
                        }
                        $contents = str_replace('Sitemap: http://yousite.com/?nv=SitemapIndex', $content_sitemap, $contents);
                        file_put_contents(NV_ROOTDIR . "/robots.txt", $contents, LOCK_EX);
                    }
                    Header("Location: " . NV_BASE_SITEURL . "install/index.php?" . NV_LANG_VARIABLE . "=" . NV_LANG_DATA . "&step=" . $step);
                    exit();
                }
            }
            else
            {
                $error = "Error add Administrator";
            }
        }
    }
    $array_data['error'] = $error;
    $title = $lang_module['website_info'];
    $contents = nv_step_6($array_data, $nextstep);
}
elseif ($step == 7)
{
    $finish = 0;
    if (file_exists(NV_ROOTDIR . "/" . NV_TEMP_DIR . "/" . NV_CONFIG_FILENAME))
    {
        $ftp_check_login = 0;
        $ftp_server_array = array('ftp_check_login' => 0);
        if ($nv_Request->isset_request('ftp_server_array', 'session'))
        {
            $ftp_server_array = $nv_Request->get_string('ftp_server_array', 'session');
            $ftp_server_array = unserialize($ftp_server_array);
        }
        if (isset($ftp_server_array['ftp_check_login']) and intval($ftp_server_array['ftp_check_login']) == 1)
        {
            // set up basic connection
            $conn_id = ftp_connect($ftp_server_array['ftp_server'], $ftp_server_array['ftp_port'], 10);

            // login with username and password
            $login_result = ftp_login($conn_id, $ftp_server_array['ftp_user_name'], $ftp_server_array['ftp_user_pass']);
            if ((!$conn_id) || (!$login_result))
            {
                $ftp_check_login = 3;
            }
            elseif (ftp_chdir($conn_id, $ftp_server_array['ftp_path']))
            {
                $ftp_check_login = 1;
            }
        }
        if ($ftp_check_login == 1)
        {
            ftp_rename($conn_id, NV_TEMP_DIR . "/" . NV_CONFIG_FILENAME, NV_CONFIG_FILENAME);
            nv_chmod_dir($conn_id, NV_UPLOADS_DIR, true);
            ftp_chmod($conn_id, 0644, NV_CONFIG_FILENAME);
            ftp_close($conn_id);
        }
        else
        {
            @rename(NV_ROOTDIR . "/" . NV_TEMP_DIR . "/" . NV_CONFIG_FILENAME, NV_ROOTDIR . "/" . NV_CONFIG_FILENAME);
        }
    }

    if (file_exists(NV_ROOTDIR . "/" . NV_CONFIG_FILENAME))
    {
        $finish = 1;
    }
    else
    {
        $finish = 2;
    }

    $title = $lang_module['done'];
    $contents = nv_step_7($finish);
}

echo nv_site_theme($step, $title, $contents);

function nv_save_file_config()
{
    global $nv_Request, $file_config_temp, $db_config, $global_config, $step;
    if (is_writable(NV_ROOTDIR . '/' . $file_config_temp) or is_writable(NV_ROOTDIR . '/' . NV_TEMP_DIR))
    {
        $global_config['cookie_prefix'] = (empty($global_config['cookie_prefix']) or $global_config['cookie_prefix'] == "nv3") ? "nv3c_" . nv_genpass(5) : $global_config['cookie_prefix'];
        $global_config['session_prefix'] = (empty($global_config['session_prefix']) or $global_config['session_prefix'] == "nv3") ? "nv3s_" . nv_genpass(6) : $global_config['session_prefix'];
        $global_config['site_email'] = (!isset($global_config['site_email'])) ? "" : $global_config['site_email'];

        $db_config['dbhost'] = (!isset($db_config['dbhost'])) ? "localhost" : $db_config['dbhost'];
        $db_config['dbport'] = (!isset($db_config['dbport'])) ? "" : $db_config['dbport'];
        $db_config['dbname'] = (!isset($db_config['dbname'])) ? "" : $db_config['dbname'];
        $db_config['dbuname'] = (!isset($db_config['dbuname'])) ? "" : $db_config['dbuname'];
        $db_config['dbpass'] = (!isset($db_config['dbpass'])) ? "" : $db_config['dbpass'];
        $db_config['prefix'] = (!isset($db_config['prefix'])) ? "nv3" : $db_config['prefix'];

        $content = "";
        $content .= "<?php\n\n";
        $content .= NV_FILEHEAD . "\n\n";
        $content .= "if ( ! defined( 'NV_MAINFILE' ) )\n";
        $content .= "{\n";
        $content .= "    die( 'Stop!!!' );\n";
        $content .= "}\n\n";
        $content .= "\$db_config['dbhost'] = \"" . $db_config['dbhost'] . "\";\n";
        $content .= "\$db_config['dbport'] = \"" . $db_config['dbport'] . "\";\n";
        $content .= "\$db_config['dbname'] = \"" . $db_config['dbname'] . "\";\n";
        $content .= "\$db_config['dbuname'] = \"" . $db_config['dbuname'] . "\";\n";
        $content .= "\$db_config['dbpass'] = \"" . $db_config['dbpass'] . "\";\n";
        $content .= "\$db_config['prefix'] = \"" . $db_config['prefix'] . "\";\n";
        $content .= "\n";
        $content .= "\$global_config['sitekey'] = \"" . $global_config['sitekey'] . "\";// Do not change sitekey!\n";
        if ($step < 7)
        {
            $content .= "\$global_config['cookie_prefix'] = \"" . $global_config['cookie_prefix'] . "\";\n";
            $content .= "\$global_config['session_prefix'] = \"" . $global_config['session_prefix'] . "\";\n";

            $global_config['ftp_server'] = (!isset($global_config['ftp_server'])) ? "localhost" : $global_config['ftp_server'];
            $global_config['ftp_port'] = (!isset($global_config['ftp_port'])) ? 21 : $global_config['ftp_port'];
            $global_config['ftp_user_name'] = (!isset($global_config['ftp_user_name'])) ? "" : $global_config['ftp_user_name'];
            $global_config['ftp_user_pass'] = (!isset($global_config['ftp_user_pass'])) ? "" : $global_config['ftp_user_pass'];
            $global_config['ftp_path'] = (!isset($global_config['ftp_path'])) ? "" : $global_config['ftp_path'];
            $global_config['ftp_check_login'] = (!isset($global_config['ftp_check_login'])) ? 0 : $global_config['ftp_check_login'];
            if ($global_config['ftp_check_login'])
            {
                $ftp_server_array = array("ftp_server" => $global_config['ftp_server'], "ftp_port" => $global_config['ftp_port'], "ftp_user_name" => $global_config['ftp_user_name'], "ftp_user_pass" => $global_config['ftp_user_pass'], "ftp_path" => $global_config['ftp_path'], "ftp_check_login" => $global_config['ftp_check_login']);
                $nv_Request->set_Session('ftp_server_array', serialize($ftp_server_array));
            }
            $content .= "\n";
            $content .= "\$global_config['ftp_server'] = \"" . $global_config['ftp_server'] . "\";\n";
            $content .= "\$global_config['ftp_port'] = \"" . $global_config['ftp_port'] . "\";\n";
            $content .= "\$global_config['ftp_user_name'] = \"" . $global_config['ftp_user_name'] . "\";\n";
            $content .= "\$global_config['ftp_user_pass'] = \"" . $global_config['ftp_user_pass'] . "\";\n";
            $content .= "\$global_config['ftp_path'] = \"" . $global_config['ftp_path'] . "\";\n";
            $content .= "\$global_config['ftp_check_login'] = \"" . $global_config['ftp_check_login'] . "\";\n";
        }
        $content .= "\n";
        $content .= "?>";
        file_put_contents(NV_ROOTDIR . '/' . $file_config_temp, $content, LOCK_EX);
        return true;
    }
    else
    {
        return false;
    }
}
?>